cmake_minimum_required(VERSION 3.16)

project(ChatClient VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

file(GLOB PB_FILES "./proto/*.proto")

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network WebSockets Protobuf)

set(PROJECT_SOURCES
        main.cpp
        mainwidget.cpp
        mainwidget.h
        mainwidget.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Core)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
find_package(Qt6 REQUIRED COMPONENTS Core)

    qt_add_executable(ChatClient
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
        model/data.h
        model/util.h
        resource.qrc
        sessionfriendarea.h sessionfriendarea.cpp
        debug.h
        msgshowarea.h msgshowarea.cpp
        msgeditarea.h msgeditarea.cpp
        selfinfowidget.h selfinfowidget.cpp
        userinfowidget.h userinfowidget.cpp
        sessiondetailwidget.h sessiondetailwidget.cpp
        choosefriendwidget.h choosefriendwidget.cpp
        groupsessiondetailwidget.h groupsessiondetailwidget.cpp
        addfriendwidget.h addfriendwidget.cpp
        historymessagewidget.h historymessagewidget.cpp
        addfriendorcreatesessionwidget.h addfriendorcreatesessionwidget.cpp
        loginwidget.h loginwidget.cpp
        mailloginwidget.h mailloginwidget.cpp
        toast.h toast.cpp
        model/datacenter.h model/datacenter.cpp
        network/netclient.h network/netclient.cpp
    )
    qt_add_protobuf(ChatClient PROTO_FILES ${PB_FILES})
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET ChatClient APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(ChatClient SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(ChatClient
            ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(ChatClient PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt6::Network Qt6::WebSockets Qt6::Protobuf)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Core)
target_link_libraries(ChatClient PRIVATE Qt6::Widgets)
target_link_libraries(ChatClient PRIVATE Qt6::Core)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.ChatClient)
endif()
set_target_properties(ChatClient PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS ChatClient
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(ChatClient)
endif()
